module bitstream_decrypt(
  input           clk,          // 50MHz时钟
  input           rst_n,        // 低电平复位
  input [255:0]   aes_key,      // AES-256密钥（来自密钥存储模块）
  input           epcs_rd_en,   // EPCS读取使能
  output reg      epcs_rd_addr, // EPCS读取地址
  input [127:0]   epcs_data,    // EPCS读取的加密位流（128位）
  output reg      jtag_cfg_en,  // FPGA1 JTAG配置使能
  output reg [127:0] jtag_data  // 解密后的位流（发送给FPGA1）
);

// AES解密核（复用加密核，反向操作）
wire [127:0] decrypt_data;
wire          decrypt_done;
aes_256_decrypt u_aes_decrypt(
  .clk(clk),
  .rst_n(rst_n),
  .decrypt_en(epcs_rd_en),
  .ciphertext(epcs_data),
  .key(aes_key),
  .done(decrypt_done),
  .plaintext(decrypt_data)
);

// 状态机：EPCS读取→AES解密→JTAG配置
typedef enum {IDLE, READ_EPCS, DECRYPT, CONFIG_FPGA1} state_t;
reg [1:0] current_state, next_state;

always @(posedge clk or negedge rst_n) begin
  if (!rst_n) begin
    current_state <= IDLE;
  end else begin
    current_state <= next_state;
  end
end

always @(*) begin
  next_state = current_state;
  case(current_state)
    IDLE: begin
      if (epcs_rd_en) next_state = READ_EPCS;
    end
    READ_EPCS: begin // 读取EPCS中加密的位流
      next_state = DECRYPT;
    end
    DECRYPT: begin // 等待AES解密完成
      if (decrypt_done) next_state = CONFIG_FPGA1;
    end
    CONFIG_FPGA1: begin // 向FPGA1发送解密后的位流
      next_state = IDLE;
    end
  endcase
end

// 输出控制
always @(posedge clk or negedge rst_n) begin
  if (!rst_n) begin
    epcs_rd_addr <= 1'b0;
    jtag_cfg_en <= 1'b0;
    jtag_data <= 128'd0;
  end else begin
    case(current_state)
      READ_EPCS: begin
        epcs_rd_addr <= epcs_rd_addr + 1'b1; // 地址自增
      end
      CONFIG_FPGA1: begin
        jtag_cfg_en <= 1'b1;
        jtag_data <= decrypt_data; // 解密后的位流发送给FPGA1
      end
      default: begin
        jtag_cfg_en <= 1'b0;
      end
    endcase
  end
end

endmodule